const COLORS_NAME = {
  reset: "\x1B[0m",
  bright: "\x1B[1m", // 亮色
  grey: "\x1B[2m", // 灰色
  italic: "\x1B[3m", // 斜体
  underline: "\x1B[4m", // 下划线
  reverse: "\x1B[7m", // 反向
  hidden: "\x1B[8m", // 隐藏
  black: "\x1B[30m", // 黑色
  red: "\x1B[31m", // 红色
  green: "\x1B[32m", // 绿色
  yellow: "\x1B[33m", // 黄色
  blue: "\x1B[34m", // 蓝色
  magenta: "\x1B[35m", // 品红
  cyan: "\x1B[36m", // 青色
  white: "\x1B[37m", // 白色
  blackBG: "\x1B[40m", // 背景色为黑色
  redBG: "\x1B[41m", // 背景色为红色
  greenBG: "\x1B[42m", // 背景色为绿色
  yellowBG: "\x1B[43m", // 背景色为黄色
  blueBG: "\x1B[44m", // 背景色为蓝色
  magentaBG: "\x1B[45m", // 背景色为品红
  cyanBG: "\x1B[46m", // 背景色为青色
  whiteBG: "\x1B[47m", // 背景色为白色
};

function colors(keys, source) {
  let values = "";
  if (typeof keys === "string") {
    values = COLORS_NAME[keys];
  } else {
    keys.forEach((key) => {
      values += COLORS_NAME[key];
    });
  }
  return values + source + COLORS_NAME["reset"];
}
// console.log(colors('red', '红色'));
// console.log(colors(['red', 'greenBG', 'underline'], '这是红色、绿色背景、下划线'));

const COLORS = {
  RegExpToken: COLORS_NAME.yellow,
  NumbericLiteral: COLORS_NAME.cyan,
  CommentToken: COLORS_NAME.white + COLORS_NAME.grey,
  String: COLORS_NAME.green,
  Semicolon: COLORS_NAME.white + COLORS_NAME.grey,
  Id: COLORS_NAME.blue,
  CloseParent: COLORS_NAME.grey,
  OpenParent: COLORS_NAME.grey,
  If: COLORS_NAME.magenta,
  Else: COLORS_NAME.magenta,

  DivToken: COLORS_NAME.red,
  MulToken: COLORS_NAME.red,
  PlusToken: COLORS_NAME.red,
};

export function highlight(content, tokens) {
  let res = "";
  for (const t of tokens) {
    const color = COLORS[t.type];
    // 分割出每个源代码的独立元素
    const tokenText = content.substring(t.loc.start.cursor, t.loc.end.cursor);

    if (color) {
      res += `${color}${tokenText}${COLORS_NAME.reset}`;
    } else {
      res += tokenText;
    }
  }

  return res;
}
